What is call-bind?
The call-bind npm package is a utility that allows you to use the ECMAScript 5 .call and .apply methods with a fixed this value. It is particularly useful when you want to ensure that the context (the this value) of a function call is bound to a specific object, regardless of how the function is invoked. This can be helpful in functional programming and when dealing with higher-order functions that might change the context of a function call.
What are call-bind's main functionalities?
callBind
Provides a way to use the native call method in a bound fashion, ensuring the this value is fixed when invoking a function.
const callBind = require('call-bind');
const call = callBind.call;
const unboundSlice = Array.prototype.slice;
const slice = call(unboundSlice);
function example() {
const args = slice(arguments);
console.log(args);
}
example(1, 2, 3); // Logs: [1, 2, 3]
applyBind
Allows you to use the native apply method in a bound manner, similar to callBind but for functions that expect an array of arguments.
const callBind = require('call-bind');
const apply = callBind.apply;
const unboundForEach = Array.prototype.forEach;
const forEach = apply(unboundForEach);
function example(array, callback) {
forEach(array, callback);
}
example([1, 2, 3], function(element) { console.log(element); }); // Logs: 1, 2, 3
Other packages similar to call-bind
function-bind
Implements the Function.prototype.bind method in an ECMAScript 5-compliant way. It is similar to call-bind in that it allows you to fix the this value for function calls, but it does so by returning a new function with the this value bound, rather than using the call or apply methods directly.
call-bind
Robustly .call.bind()
a function.
Getting started
npm install --save call-bind
Usage/Examples
const assert = require('assert');
const callBind = require('call-bind');
const callBound = require('call-bind/callBound');
function f(a, b) {
assert.equal(this, 1);
assert.equal(a, 2);
assert.equal(b, 3);
assert.equal(arguments.length, 2);
}
const fBound = callBind(f);
const slice = callBound('Array.prototype.slice');
delete Function.prototype.call;
delete Function.prototype.bind;
fBound(1, 2, 3);
assert.deepEqual(slice([1, 2, 3, 4], 1, -1), [2, 3]);
Tests
Clone the repo, npm install
, and run npm test